package com.skyline.base.service;

import java.util.List;

import com.skyline.base.model.Comment;
import com.skyline.base.type.CommentType;
import com.skyline.common.bean.Page;

/**
 * 评论模块的Service接口
 * 
 * @author Jairus Chan
 * @version 0.1
 * */
public interface CommentService extends BaseService {

	/**
	 * commentResource为增加评论
	 * 
	 * @param commenterId
	 *            评论者的ID
	 * @param commenterNickname
	 *            评论者的nickname
	 * @param commenterPortrait
	 *            评论者的头像
	 * @param content
	 *            评论内容
	 * @param ref
	 *            所回复／引用的评论的ID
	 * @param resourceId
	 *            所评论的资源的ID
	 * @param reourceName
	 *            所评论的资源的名称／title等,用于发布通知
	 * @param commentType
	 *            评论的类型
	 * @param ownerId
	 *            所评论的资源的主人的ID
	 */
	public void commentResource(Long commenterId, String commenterNickname, String commenterPortrait, String content,
			Long ref, Object resourceId, String reourceName, CommentType commentType, Long ownerId);

	/**
	 * getComments,通过resourceId与commentType来获取通知
	 * 
	 * @param page
	 *            分页
	 * @param resourceId
	 *            资源的ID
	 * @param commentType
	 *            评论的类型
	 * @return 返回所需的评论
	 */
	public List<Comment> lsComments(Page page, Object resourceId, CommentType commentType);

	/**
	 * commentAgree，增加一个评论的同意数，也就是同意某一条评论
	 * 
	 * @param resourceId
	 *            资源的ID
	 * @param commentId
	 *            评论的ID
	 * @param commentType
	 *            评论的类型
	 */
	public void commentAgree(Object resourceId, Long commentId, CommentType commentType);

	/**
	 * commentDisagree，增加一个评论的反对数，也就是不同意某一条评论
	 * 
	 * @param resourceId
	 *            资源的ID
	 * @param commentId
	 *            评论的ID
	 * @param commentType
	 *            评论的类型
	 */
	public void commentDisagree(Object resourceId, Long commentId, CommentType commentType);

	/**
	 * deleteComment，删除评论
	 * 
	 * @param resourceId
	 *            资源的ID
	 * @param commentId
	 *            评论的ID
	 * @param commentType
	 *            评论的类型
	 * @param actionerId
	 *            操作者的ID,只有评论者，资源所有者，管理员可以删除这条评论
	 */
	public void deleteComment(Object resourceId, Long commentId, CommentType commentType, Long actionerId);
	
	/**
	 * 获取单条评论
	 * 
	 * @param commentId
	 *            评论的ID
	 * @param commentType
	 *            评论的类型
	 */
	public Comment getCommentById(Long commentId, CommentType commentType);
}
